package kgame5.kio{

/**
 * @author kangkai
 * !!这个作用不大，可以废除，直接用xml要方便的多?
 * 这个是从一个txt里读取关键参数设置，然后写到C里，并能通过T.p输出C的代码。
 * 
 * 目的：做这个的目的就是当改变一些参数的时候不需要重新编译(重新编译是很浪费时间的)，提高测试效率
 * 
 * 例如：
 		AD_COUNT:int=3,//失败3次我就出广告了要
		
		//--地图
		G:int=-3,//重力加速度
		CELLSIZE:int=64,
		
		//--数量
		SHEEP_COUNT:int=20,//一共20个敌人
		SHEEP_ALIVECOUNT:int=4,//最多同时存活5个

*
*用法是
*1：先执行一下这个，它会在输出面板里输出一个函数，此函数是用来根据key-valve来对C进行赋值的
*2：把刚才输出的setPairs()函数拷贝到C中
*3：再次执行new CongigerParser("test.txt",C.setPairs),把C.setParis作为参数传入，此时就可以测试了
*-,可以在swf的一个地方显示版本号即C.VER,这样就知道更新了
*
*4：数据调试完毕后就吧test.text的内容拷回C去即可发布了
 */
import kgame5.kutil.*;

import flash.events.*;
import flash.net.*;

public class ConfigerParser extends EventDispatcher{
	public static const EVENTTYPE_LOADOK:String="OK";
	public function ConfigerParser(){
		
	}
	private var func_setPair:Function;
	private var loader:URLLoader;
	public function Load(sFilePath:String="test.txt",p_func:Function=null){
		loader=new URLLoader();
		func_setPair=p_func;
		loader.addEventListener(Event.COMPLETE, onLoadOK);
		loader.load(new URLRequest(sFilePath));
	}
	//通知说解析外部配置数据完毕
	private function notifyLoadOK(){
		this.dispatchEvent(new KEvent(EVENTTYPE_LOADOK));
	}
//	private function onLoadOK(e:Event){
//		var txt:String= loader.data;
//		var aText:Array=txt.split("\r\n");
//		T.p(aText);
//		T.p("输出代码");
//		for(var i:int=0;i<aText.length;i++){
//			var kk:Array=aText[i].split(":");
//			T.p("public static var "+kk[0]+" : int="+kk[1]+";");
//			fitCode(kk[0],kk[1]);
//		}
//		
//	}
//	private function fitCode(key:String,value:String){
//	}
	
	private function onLoadOK(e:Event){
		var txt:String= loader.data;
		var rg:RegExp=/(\w+):int=(\d+)/g;
		var obj:Object=rg.exec(txt);
		T.p("//此代码是由kgame5.kgu.ConfigerParser生成的.生成解析所读取的数据代码,这个是放到具体工程的C里的");
		T.p("public static function setPair(key:String,value:String){");
		T.p("switch(key){");
		while(obj!=null){
			T.p("case \""+obj[1]+"\":");
			T.p("C."+obj[1]+"=parseInt(value);//"+obj[2]);
			T.p("break;");
			
			if(func_setPair!=null){
				func_setPair.apply(null, [obj[1],obj[2]]);
			}
			//T.p(obj[1],obj[2]);
			obj=rg.exec(txt);
		}
		T.p("}");
		T.p("}");
		
		//--通知完毕
		notifyLoadOK();
	}
}//end of class
}
